home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume11 / templates / part05 < prev    next >
Encoding:
Internet Message Format  |  1987-10-04  |  39.7 KB

  1. Subject:  v11i095:  Template mode for GNU Emacs, Part05/06
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rs@uunet.UU.NET
  5.  
  6. Submitted-by: "Mark A. Ardis" <maa@sei.cmu.edu>
  7. Posting-number: Volume 11, Issue 95
  8. Archive-name: templates/part05
  9.  
  10. #! /bin/sh
  11. # This is a shell archive, meaning:
  12. # 1. Remove everything above the #! /bin/sh line.
  13. # 2. Save the resulting text in a file.
  14. # 3. Execute the file with /bin/sh (not csh) to create:
  15. #    awk.el
  16. #    bib.el
  17. #    pascal.el
  18. #    menu.el
  19. #    symbol.el
  20. #    tplreplace.el
  21. export PATH; PATH=/bin:/usr/bin:$PATH
  22. echo shar: "extracting 'awk.el'" '(686 characters)'
  23. if test -f 'awk.el'
  24. then
  25.     echo shar: "will not over-write existing file 'awk.el'"
  26. else
  27. sed 's/^X//' << \SHAR_EOF > 'awk.el'
  28. X;;; awk.el -- Awk mode for Gnuemacs
  29. X;;; Copyright (C) 1987 Mark A. Ardis.
  30. X
  31. X(provide 'awk)
  32. X
  33. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  34. X
  35. X(defvar awk-mode-map nil
  36. X  "Key map for Awk mode."
  37. X  ) ; awk-mode-map
  38. X
  39. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  40. X
  41. X(defun awk-mode ()
  42. X  "Fundamental mode plus Awk templates:
  43. X\\{awk-mode-map}
  44. X"
  45. X  (interactive)
  46. X                    ; Local Variables
  47. X  (let ()
  48. X                    ; Body
  49. X    (setq major-mode 'awk-mode)
  50. X    (setq mode-name "Awk")
  51. X    (template-mode)
  52. X    (setq awk-mode-map (current-local-map))
  53. X    ) ; let
  54. X  ) ; defun awk-mode
  55. X
  56. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  57. X
  58. X;;; end of awk.el
  59. SHAR_EOF
  60. if test 686 -ne "`wc -c < 'awk.el'`"
  61. then
  62.     echo shar: "error transmitting 'awk.el'" '(should have been 686 characters)'
  63. fi
  64. fi
  65. echo shar: "extracting 'bib.el'" '(685 characters)'
  66. if test -f 'bib.el'
  67. then
  68.     echo shar: "will not over-write existing file 'bib.el'"
  69. else
  70. sed 's/^X//' << \SHAR_EOF > 'bib.el'
  71. X;;; bib.el -- Bib mode for Gnuemacs
  72. X;;; Copyright (C) 1987 Mark A. Ardis.
  73. X
  74. X(provide 'bib)
  75. X
  76. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  77. X
  78. X(defvar bib-mode-map nil
  79. X  "Keymap for Bib Mode."
  80. X  ) ; bib-mode-map
  81. X
  82. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  83. X
  84. X(defun bib-mode ()
  85. X  "Fundamental mode plus Bib templates:
  86. X\\{bib-mode-map}
  87. X"
  88. X  (interactive)
  89. X                    ; Local Variables
  90. X  (let ()
  91. X                    ; Body
  92. X    (setq major-mode 'bib-mode)
  93. X    (setq mode-name "Bib")
  94. X    (template-mode)
  95. X    (setq bib-mode-map (current-local-map))
  96. X    ) ; let
  97. X  ) ; defun bib-mode
  98. X
  99. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  100. X
  101. X;;; end of bib.el
  102. SHAR_EOF
  103. if test 685 -ne "`wc -c < 'bib.el'`"
  104. then
  105.     echo shar: "error transmitting 'bib.el'" '(should have been 685 characters)'
  106. fi
  107. fi
  108. echo shar: "extracting 'pascal.el'" '(727 characters)'
  109. if test -f 'pascal.el'
  110. then
  111.     echo shar: "will not over-write existing file 'pascal.el'"
  112. else
  113. sed 's/^X//' << \SHAR_EOF > 'pascal.el'
  114. X;;; pascal.el -- Pascal mode for Gnuemacs
  115. X;;; Copyright (C) 1987 Mark A. Ardis.
  116. X
  117. X(provide 'pascal)
  118. X
  119. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  120. X
  121. X(defvar pascal-mode-map nil
  122. X  "Keymap for Pascal Mode."
  123. X  ) ; pascal-mode-map
  124. X
  125. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  126. X
  127. X(defun pascal-mode ()
  128. X  "Fundamental mode plus Pascal templates:
  129. X\\{pascal-mode-map}
  130. X"
  131. X  (interactive)
  132. X                    ; Local Variables
  133. X  (let ()
  134. X                    ; Body
  135. X    (setq major-mode 'pascal-mode)
  136. X    (setq mode-name "Pascal")
  137. X    (template-mode)
  138. X    (setq pascal-mode-map (current-local-map))
  139. X    ) ; let
  140. X  ) ; defun pascal-mode
  141. X
  142. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  143. X
  144. X;;; end of pascal.el
  145. SHAR_EOF
  146. if test 727 -ne "`wc -c < 'pascal.el'`"
  147. then
  148.     echo shar: "error transmitting 'pascal.el'" '(should have been 727 characters)'
  149. fi
  150. fi
  151. echo shar: "extracting 'menu.el'" '(6276 characters)'
  152. if test -f 'menu.el'
  153. then
  154.     echo shar: "will not over-write existing file 'menu.el'"
  155. else
  156. sed 's/^X//' << \SHAR_EOF > 'menu.el'
  157. X;;; menu.el
  158. X;;; Copyright (C) 1987 Mark A. Ardis.
  159. X
  160. X(provide 'menu)
  161. X
  162. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  163. X
  164. X(defvar menu-choice nil
  165. X  "Item selected from menu."
  166. X) ; menu-choice
  167. X(make-variable-buffer-local 'menu-choice)
  168. X
  169. X(defvar menu-last-input ""
  170. X  "String used for searching through menu."
  171. X) ; menu-last-input
  172. X(make-variable-buffer-local 'menu-last-input)
  173. X(setq-default menu-last-input "")
  174. X
  175. X(defvar menu-mode-map nil "Key-map for Menu Mode.")
  176. X
  177. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  178. X
  179. X(defun menu-mode ()
  180. X  "Major mode for selecting an item from a menu.
  181. X     Like View Mode, but with only the following commands:
  182. X     Space, C-n   menu-next-item
  183. X     Del, C-p     menu-previous-item
  184. X     a,b,...,z    menu-next-match
  185. X     Return, Linefeed, ESC C-c   exit.
  186. X   Returns the line selected."
  187. X  (interactive)
  188. X                    ; Local Variables
  189. X  (let ()
  190. X                    ; Body
  191. X    (or menu-mode-map
  192. X    (menu-set-local-keys))
  193. X    (use-local-map menu-mode-map)
  194. X    (setq major-mode 'menu-mode)
  195. X    (setq mode-name "Menu")
  196. X    (setq case-fold-search t)
  197. X    (setq menu-last-input "")
  198. X                    ; Prompt for selection
  199. X    (message "Position on selection and exit with Return (or ESC-^c).")
  200. X                    ; Wait for user's selction
  201. X    (setq menu-choice nil)
  202. X    (unwind-protect
  203. X    (recursive-edit)
  204. X    ) ; unwind-protect
  205. X                    ; Return selection
  206. X    menu-choice
  207. X  ) ; let
  208. X) ; defun menu-mode
  209. X
  210. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  211. X
  212. X(defun menu-abort-recursive-edit ()
  213. X  "Abort recursive edit in menu-mode gracefully."
  214. X  (interactive)
  215. X                    ; Local Variables
  216. X  (let ()
  217. X                    ; Body
  218. X    (setq menu-choice nil)
  219. X    (exit-recursive-edit)
  220. X  ) ; let
  221. X) ; defun menu-abort-recursive-edit
  222. X
  223. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  224. X
  225. X(defun menu-exit-recursive-edit ()
  226. X  "Pick up selection and exit Menu-mode."
  227. X  (interactive)
  228. X                    ; Local Variables
  229. X  (let (start stop)
  230. X                    ; Body
  231. X    (beginning-of-line)
  232. X    (setq start (point))
  233. X    (end-of-line)
  234. X    (setq stop (point))
  235. X    (setq menu-choice (buffer-substring start stop))
  236. X    (exit-recursive-edit)
  237. X  ) ; let
  238. X) ; defun menu-exit-recursive-edit
  239. X
  240. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  241. X
  242. X(defun menu-next-item ()
  243. X  "Go to the next item in the menu (wrap around at end)."
  244. X  (interactive)
  245. X                    ; Local Variables
  246. X  (let ()
  247. X                    ; Body
  248. X    (end-of-line)
  249. X    (if (eobp)
  250. X      (beginning-of-buffer)
  251. X      (beginning-of-line 2)
  252. X    ) ; if
  253. X    (setq menu-last-input "")
  254. X  ) ; let
  255. X) ; defun menu-next-item
  256. X
  257. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  258. X
  259. X(defun menu-next-match ()
  260. X  "Find the next item with last-input-char leading character."
  261. X  (interactive)
  262. X                    ; Local Variables
  263. X  (let (stop)
  264. X                    ; Body
  265. X    (setq menu-last-input
  266. X      (concat menu-last-input (char-to-string last-input-char)))
  267. X    (beginning-of-line)
  268. X    (if (not (re-search-forward (concat "^" menu-last-input) nil t))
  269. X      (progn
  270. X    (setq stop (point))
  271. X    (beginning-of-buffer)
  272. X    (if (not (re-search-forward (concat "^" menu-last-input) stop stop))
  273. X      (progn
  274. X        (message "No match for that character!")
  275. X        (ding)
  276. X        (setq menu-last-input "")
  277. X      ) ; progn
  278. X    ) ; if
  279. X      ) ; progn
  280. X    ) ; if
  281. X  ) ; let
  282. X) ; defun menu-next-match
  283. X
  284. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  285. X
  286. X(defun menu-previous-item ()
  287. X  "Go to the previous item in the menu (wrap around at beginning)."
  288. X  (interactive)
  289. X                    ; Local Variables
  290. X  (let ()
  291. X                    ; Body
  292. X    (beginning-of-line)
  293. X    (if (bobp)
  294. X      (progn
  295. X    (end-of-buffer)
  296. X    (beginning-of-line)
  297. X      ) ; progn
  298. X      (beginning-of-line 0)
  299. X    ) ; if
  300. X    (setq menu-last-input "")
  301. X  ) ; let
  302. X) ; defun menu-previous-item
  303. X
  304. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  305. X
  306. X(defun menu-set-local-keys ()
  307. X  "Create key-map for Menu Mode."
  308. X                    ; Local Variables
  309. X  (let ()
  310. X                    ; Body
  311. X    (setq menu-mode-map (make-keymap))
  312. X    (suppress-keymap menu-mode-map)
  313. X    (define-key menu-mode-map "\C-g" 'menu-abort-recursive-edit)
  314. X    (define-key menu-mode-map "\C-j" 'menu-exit-recursive-edit) ; LFD
  315. X    (define-key menu-mode-map "\C-m" 'menu-exit-recursive-edit) ; CR
  316. X    (define-key menu-mode-map "\e\C-c" 'menu-exit-recursive-edit)
  317. X    (define-key menu-mode-map " " 'menu-next-item)
  318. X    (define-key menu-mode-map "\C-n" 'menu-next-item)
  319. X    (define-key menu-mode-map "\C-p" 'menu-previous-item)
  320. X    (define-key menu-mode-map "\177" 'menu-previous-item) ; DEL
  321. X    (define-key menu-mode-map "a" 'menu-next-match)
  322. X    (define-key menu-mode-map "b" 'menu-next-match)
  323. X    (define-key menu-mode-map "c" 'menu-next-match)
  324. X    (define-key menu-mode-map "d" 'menu-next-match)
  325. X    (define-key menu-mode-map "e" 'menu-next-match)
  326. X    (define-key menu-mode-map "f" 'menu-next-match)
  327. X    (define-key menu-mode-map "g" 'menu-next-match)
  328. X    (define-key menu-mode-map "h" 'menu-next-match)
  329. X    (define-key menu-mode-map "i" 'menu-next-match)
  330. X    (define-key menu-mode-map "j" 'menu-next-match)
  331. X    (define-key menu-mode-map "k" 'menu-next-match)
  332. X    (define-key menu-mode-map "l" 'menu-next-match)
  333. X    (define-key menu-mode-map "m" 'menu-next-match)
  334. X    (define-key menu-mode-map "n" 'menu-next-match)
  335. X    (define-key menu-mode-map "o" 'menu-next-match)
  336. X    (define-key menu-mode-map "p" 'menu-next-match)
  337. X    (define-key menu-mode-map "q" 'menu-next-match)
  338. X    (define-key menu-mode-map "r" 'menu-next-match)
  339. X    (define-key menu-mode-map "s" 'menu-next-match)
  340. X    (define-key menu-mode-map "t" 'menu-next-match)
  341. X    (define-key menu-mode-map "u" 'menu-next-match)
  342. X    (define-key menu-mode-map "v" 'menu-next-match)
  343. X    (define-key menu-mode-map "w" 'menu-next-match)
  344. X    (define-key menu-mode-map "x" 'menu-next-match)
  345. X    (define-key menu-mode-map "y" 'menu-next-match)
  346. X    (define-key menu-mode-map "z" 'menu-next-match)
  347. X  ) ; let
  348. X) ; defun menu-set-local-keys
  349. X
  350. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  351. X
  352. X(defun menu-undefined ()
  353. X  "Catch all undefined keys for Menu Mode."
  354. X  (interactive)
  355. X                    ; Local Variables
  356. X  (let ()
  357. X                    ; Body
  358. X    (ding)
  359. X    (message "C-n for next, C-p for previous, Return (or ESC-^c) to quit.")
  360. X    (setq menu-last-input "")
  361. X  ) ; let
  362. X) ; defun menu-undefined
  363. X
  364. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  365. X
  366. X;;; end of menu.el
  367. SHAR_EOF
  368. if test 6276 -ne "`wc -c < 'menu.el'`"
  369. then
  370.     echo shar: "error transmitting 'menu.el'" '(should have been 6276 characters)'
  371. fi
  372. fi
  373. echo shar: "extracting 'symbol.el'" '(25432 characters)'
  374. if test -f 'symbol.el'
  375. then
  376.     echo shar: "will not over-write existing file 'symbol.el'"
  377. else
  378. sed 's/^X//' << \SHAR_EOF > 'symbol.el'
  379. X;;; symbol.el -- Identifier completion facilities
  380. X;;; Copyright (C) 1987 Mark A. Ardis.
  381. X
  382. X(provide 'symbol)
  383. X
  384. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  385. X
  386. X(defvar sym-completion-buffer nil
  387. X  "Buffer containing user-entered symbols for identifier completion."
  388. X) ; sym-completion-buffer
  389. X(make-variable-buffer-local 'sym-completion-buffer)
  390. X
  391. X(defvar sym-end-display "<<"
  392. X  "*Display marker after string to be created in symbol mode."
  393. X) ; sym-end-display
  394. X
  395. X(defvar sym-end-marker (make-marker)
  396. X  "Marker at end of symbol."
  397. X) ; sym-end-marker
  398. X(make-variable-buffer-local 'sym-end-marker)
  399. X(setq-default sym-end-marker (make-marker))
  400. X
  401. X(defvar sym-original nil
  402. X  "Text string originally present, to be replaced in symbol-mode."
  403. X) ; sym-original
  404. X(make-variable-buffer-local 'sym-original)
  405. X
  406. X(defvar sym-start-display ">>"
  407. X  "*Display marker before string to be created in symbol mode."
  408. X) ; sym-start-display
  409. X
  410. X(defvar sym-start nil
  411. X  "Position of start of symbol in buffer."
  412. X) ; sym-start
  413. X(make-variable-buffer-local 'sym-start)
  414. X
  415. X(defvar symbol-mode-map nil
  416. X  "Key-map for Symbol Mode."
  417. X) ; symbol-mode-map
  418. X
  419. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  420. X
  421. X(defun symbol-mode ()
  422. X  "Major mode for inserting symbols in place.  Like any other mode,
  423. X    except that newline terminates it, and the following commands
  424. X    are available:
  425. X      TAB  attempt to complete last identifier typed
  426. X    Meant to be called from sym-read-string, which initializes."
  427. X  (interactive)
  428. X                    ; Local Variables
  429. X  (let ()
  430. X                    ; Body
  431. X    (or symbol-mode-map
  432. X      (sym-set-local-keys))
  433. X    (use-local-map symbol-mode-map)
  434. X    (setq major-mode 'symbol-mode)
  435. X    (setq mode-name "Symbol")
  436. X  ) ; let
  437. X) ; defun symbol-mode
  438. X
  439. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  440. X
  441. X(defun add-symbol ()
  442. X  "Add the symbol before point to the template-mode completion list."
  443. X  (interactive)
  444. X                    ; Local Variables
  445. X  (let (start)
  446. X                    ; Body
  447. X    (forward-word -1)
  448. X    (setq start (point))
  449. X    (forward-word 1)
  450. X    (sym-enter-id (buffer-substring start (point)))
  451. X  ) ; let
  452. X) ; defun add-symbol
  453. X
  454. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  455. X
  456. X(defun expand-symbol ()
  457. X  "Expand the symbol before point using the template-mode completion list."
  458. X  (interactive)
  459. X                    ; Local Variables
  460. X  (let (start result)
  461. X                    ; Body
  462. X    (forward-word -1)
  463. X    (setq start (point))
  464. X    (forward-word 1)
  465. X    (setq result (sym-complete-id (buffer-substring start (point))))
  466. X    (backward-kill-word 1)
  467. X    (insert-before-markers result)
  468. X  ) ; let
  469. X) ; defun expand-symbol
  470. X
  471. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  472. X
  473. X(defun sym-abort-recursive-edit ()
  474. X  "Catch abort and repair entry."
  475. X  (interactive)
  476. X                    ; Local Variables
  477. X  (let ()
  478. X                    ; Body
  479. X    (sym-reposition-point)
  480. X    (if (< sym-start (marker-position sym-end-marker))
  481. X      (progn
  482. X    (delete-region sym-start (marker-position sym-end-marker))
  483. X    (sym-reset-display)
  484. X      ) ; progn
  485. X    ) ; if
  486. X    (abort-recursive-edit)
  487. X  ) ; let
  488. X) ; defun sym-illegal-command
  489. X
  490. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  491. X
  492. X(defun sym-backward-char ()
  493. X  "Move point left one character, if possible."
  494. X                    ; Local Variables
  495. X  (interactive)
  496. X  (let ()
  497. X                    ; Body
  498. X    (sym-reposition-point)
  499. X    (if (> (point) sym-start)
  500. X      (backward-char 1)
  501. X                    ; else cannot advance
  502. X      (ding)
  503. X    ) ; if
  504. X  ) ; let
  505. X) ; defun sym-backward-char
  506. X
  507. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  508. X
  509. X(defun sym-backward-kill-word ()
  510. X  "Delete the previous word in symbol-mode."
  511. X                    ; Local Variables
  512. X  (interactive)
  513. X  (let ()
  514. X                    ; Body
  515. X    (sym-reposition-point)
  516. X    (if (> (point) sym-start)
  517. X      (progn
  518. X    (backward-kill-word 1)
  519. X                    ; If empty input, restore original
  520. X    (sym-reset-display)
  521. X      ) ; progn
  522. X                    ; else cannot delete
  523. X      (ding)
  524. X    ) ; if
  525. X  ) ; let
  526. X) ; defun sym-backward-kill-word
  527. X
  528. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  529. X
  530. X(defun sym-backward-word ()
  531. X  "Move point left one word, if possible."
  532. X                    ; Local Variables
  533. X  (interactive)
  534. X  (let ()
  535. X                    ; Body
  536. X    (sym-reposition-point)
  537. X    (if (> (point) sym-start)
  538. X      (backward-word 1)
  539. X                    ; else cannot advance
  540. X      (ding)
  541. X    ) ; if
  542. X  ) ; let
  543. X) ; defun sym-backward-word
  544. X
  545. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  546. X
  547. X(defun sym-complete-id (string)
  548. X  "Expand the identifier STRING using the completion table."
  549. X                    ; Local Variables
  550. X  (let (start text-buffer)
  551. X                    ; Body
  552. X    (message "Expanding %s..." string)
  553. X    (setq text-buffer (buffer-name))
  554. X    (set-buffer sym-completion-buffer)
  555. X                    ; Search for match
  556. X    (goto-char (point-min))
  557. X    (if (re-search-forward (concat "^" string) (point-max) t)
  558. X      (progn
  559. X    (beginning-of-line)
  560. X    (setq start (point))
  561. X    (end-of-line)
  562. X    (setq string (buffer-substring start (point)))
  563. X      ) ; progn
  564. X    ) ; if
  565. X    (set-buffer text-buffer)
  566. X    (bury-buffer sym-completion-buffer)
  567. X    (message "Expanding done.")
  568. X                    ; Return expanded string
  569. X    string
  570. X  ) ; let
  571. X) ; defun sym-complete-id
  572. X
  573. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  574. X
  575. X(defun sym-create-display ()
  576. X  "Create the displayed string (if necessary) in symbol-mode."
  577. X                    ; Local Variables
  578. X  (let ()
  579. X                    ; Body
  580. X    (if (= sym-start (marker-position sym-end-marker))
  581. X      (progn
  582. X                    ; Remove the original string
  583. X    (delete-char (length sym-original))
  584. X                    ; Insert display
  585. X    (insert-before-markers sym-start-display)
  586. X    (insert-before-markers sym-end-display)
  587. X    (search-backward sym-end-display)
  588. X                    ; Reset the markers to empty
  589. X    (set-marker sym-end-marker (point))
  590. X    (setq sym-start (point))
  591. X      ) ; progn
  592. X    ) ; if
  593. X  ) ; let
  594. X) ; defun sym-create-display
  595. X
  596. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  597. X
  598. X(defun sym-delete-backward-char ()
  599. X  "Delete the previous character created in symbol-mode."
  600. X                    ; Local Variables
  601. X  (interactive)
  602. X  (let ()
  603. X                    ; Body
  604. X    (sym-reposition-point)
  605. X    (if (> (point) sym-start)
  606. X      (progn
  607. X    (delete-backward-char 1)
  608. X                    ; If empty input, restore original
  609. X    (sym-reset-display)
  610. X      ) ; progn
  611. X                    ; else cannot delete
  612. X      (ding)
  613. X    ) ; if
  614. X  ) ; let
  615. X) ; defun sym-delete-backward-char
  616. X
  617. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  618. X
  619. X(defun sym-delete-char ()
  620. X  "Delete the following character created in symbol-mode."
  621. X                    ; Local Variables
  622. X  (interactive)
  623. X  (let ()
  624. X                    ; Body
  625. X    (sym-reposition-point)
  626. X    (if (< (point) (marker-position sym-end-marker))
  627. X      (progn
  628. X    (delete-char 1)
  629. X                    ; If empty input, restore original
  630. X    (sym-reset-display)
  631. X      ) ; progn
  632. X                    ; else cannot delete
  633. X      (ding)
  634. X    ) ; if
  635. X  ) ; let
  636. X) ; defun sym-delete-char
  637. X
  638. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  639. X
  640. X(defun sym-enter-id (string)
  641. X  "Enter STRING into the identifier completion table."
  642. X  (interactive)
  643. X                    ; Local Variables
  644. X  (let (text-buffer prefix suffix found end-line)
  645. X                    ; Body
  646. X    (message "Adding %s..." string)
  647. X    (setq text-buffer (buffer-name))
  648. X    (set-buffer sym-completion-buffer)
  649. X    (beginning-of-buffer)
  650. X    (setq start (point))
  651. X    (end-of-line nil)
  652. X    (setq found (buffer-substring start (point)))
  653. X    (setq more t)
  654. X    (while (and more (string-lessp found string))
  655. X      (if (not (eobp))
  656. X    (progn
  657. X      (beginning-of-line 2)
  658. X      (setq start (point))
  659. X      (end-of-line nil)
  660. X      (setq found (buffer-substring start (point)))
  661. X    ) ; progn
  662. X      ; else
  663. X    (progn
  664. X      (setq more nil)
  665. X      (if (not (bobp))
  666. X        (newline)
  667. X      ) ; if
  668. X    ) ; progn
  669. X      ) ; if
  670. X    ) ; while
  671. X    (if more
  672. X      (if (not (string-equal found string))
  673. X    (progn
  674. X      (beginning-of-line nil)
  675. X      (insert string "\n")
  676. X    ) ; progn
  677. X      ) ; if not equal
  678. X    ; else
  679. X      (insert string)
  680. X    ) ; if more
  681. X    (set-buffer text-buffer)
  682. X    (bury-buffer sym-completion-buffer)
  683. X    (message "Adding Done." string)
  684. X  ) ; let
  685. X) ; defun sym-enter-id
  686. X
  687. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  688. X
  689. X(defun sym-expand-last-id ()
  690. X  "Try to expand last identifier created in symbol-mode."
  691. X  (interactive)
  692. X                    ; Local Variables
  693. X  (let (end-id string)
  694. X                    ; Body
  695. X    (sym-reposition-point)
  696. X    (if (> (point) sym-start)
  697. X      (progn
  698. X    (setq end-id (point))
  699. X    (re-search-backward "\\W")
  700. X    (if (< (point) end-id)
  701. X      (forward-char 1)
  702. X    ) ; if
  703. X    (if (< (point) sym-start)
  704. X      (goto-char sym-start)
  705. X    ) ; if
  706. X    (setq string (buffer-substring (point) end-id))
  707. X    (if (> (length string) 0)
  708. X      (progn
  709. X        (delete-char (length string))
  710. X        (setq string (sym-complete-id string))
  711. X        (insert-before-markers string)
  712. X      ) ; progn
  713. X    ) ; if
  714. X      ) ; progn
  715. X                    ; else cannot expand empty string
  716. X      (ding)
  717. X    ) ; if
  718. X  ) ; let
  719. X) ; defun sym-expand-last-id
  720. X
  721. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  722. X
  723. X(defun sym-forward-char ()
  724. X  "Move point right one character, if possible."
  725. X                    ; Local Variables
  726. X  (interactive)
  727. X  (let ()
  728. X                    ; Body
  729. X    (sym-reposition-point)
  730. X    (if (< (point) (marker-position sym-end-marker))
  731. X      (forward-char 1)
  732. X                    ; else cannot advance
  733. X      (ding)
  734. X    ) ; if
  735. X  ) ; let
  736. X) ; defun sym-forward-char
  737. X
  738. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  739. X
  740. X(defun sym-forward-word ()
  741. X  "Move point right one word, if possible."
  742. X                    ; Local Variables
  743. X  (interactive)
  744. X  (let ()
  745. X                    ; Body
  746. X    (sym-reposition-point)
  747. X    (if (< (point) (marker-position sym-end-marker))
  748. X      (forward-word 1)
  749. X                    ; else cannot advance
  750. X      (ding)
  751. X    ) ; if
  752. X  ) ; let
  753. X) ; defun sym-forward-word
  754. X
  755. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  756. X
  757. X(defun sym-illegal-command ()
  758. X  "Catch all illegal symbol-mode commands."
  759. X  (interactive)
  760. X                    ; Local Variables
  761. X  (let ()
  762. X                    ; Body
  763. X    (ding)
  764. X    (message "That command is not allowed in symbol-mode.")
  765. X  ) ; let
  766. X) ; defun sym-illegal-command
  767. X
  768. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  769. X
  770. X(defun sym-kill-line ()
  771. X  "Kill the current symbol line in symbol-mode"
  772. X                    ; Local Variables
  773. X  (interactive)
  774. X  (let ()
  775. X                    ; Body
  776. X    (sym-reposition-point)
  777. X    (if (< (point) (marker-position sym-end-marker))
  778. X      (progn
  779. X    (delete-region (point) (marker-position sym-end-marker))
  780. X                    ; If empty input, restore original
  781. X    (sym-reset-display)
  782. X      ) ; progn
  783. X                    ; else cannot delete
  784. X      (ding)
  785. X    ) ; if
  786. X  ) ; let
  787. X) ; defun sym-kill-line
  788. X
  789. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  790. X
  791. X(defun sym-kill-word ()
  792. X  "Delete the following word in symbol-mode."
  793. X                    ; Local Variables
  794. X  (interactive)
  795. X  (let ()
  796. X                    ; Body
  797. X    (sym-reposition-point)
  798. X    (if (< (point) (marker-position sym-end-marker))
  799. X      (progn
  800. X    (kill-word 1)
  801. X                    ; If empty input, restore original
  802. X    (sym-reset-display)
  803. X      ) ; progn
  804. X                    ; else cannot delete
  805. X      (ding)
  806. X    ) ; if
  807. X  ) ; let
  808. X) ; defun sym-kill-word
  809. X
  810. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  811. X
  812. X(defun sym-position-end ()
  813. X  "Position point at end of symbol line."
  814. X  (interactive)
  815. X                    ; Local Variables
  816. X  (let ()
  817. X                    ; Body
  818. X    (goto-char (marker-position sym-end-marker))
  819. X  ) ; let
  820. X) ; defun sym-position-end
  821. X
  822. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  823. X
  824. X(defun sym-position-start ()
  825. X  "Position point at start of symbol line."
  826. X  (interactive)
  827. X                    ; Local Variables
  828. X  (let ()
  829. X                    ; Body
  830. X    (goto-char sym-start)
  831. X  ) ; let
  832. X) ; defun sym-position-start
  833. X
  834. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  835. X
  836. X(defun sym-read-string (prompt original)
  837. X  "Read characters and insert them at point.  First arg PROMPT is a
  838. X    message to prompt the user.  Second arg ORIGINAL is an initial
  839. X    string to use if all input is deleted."
  840. X                    ; Local Variables
  841. X  (let (save-mode save-name save-keymap sym-input sym-valid-response)
  842. X                    ; Body
  843. X                    ; Initialize state
  844. X    (setq sym-start (point))
  845. X    (setq sym-end-marker (make-marker))
  846. X    (set-marker sym-end-marker (point))
  847. X    (setq sym-original original)
  848. X                    ; Save mode variables
  849. X    (setq save-mode major-mode)
  850. X    (setq save-name mode-name)
  851. X    (setq save-keymap (current-local-map))
  852. X    (symbol-mode)
  853. X    (message "%s" prompt)
  854. X                    ; Wait for user's creation
  855. X    (setq sym-input original)
  856. X    (unwind-protect
  857. X
  858. X  (progn
  859. X(setq sym-valid-response nil)
  860. X(while (not sym-valid-response)
  861. X  (recursive-edit)
  862. X                    ; Pick up created string
  863. X  (setq sym-input
  864. X    (buffer-substring sym-start (marker-position sym-end-marker)))
  865. X  (sym-reposition-point)
  866. X                    ; If invalid try again
  867. X  (if (and (boundp 'sym-check-validity-hook)
  868. X    sym-check-validity-hook)
  869. X  (progn
  870. X    (setq sym-valid-response
  871. X      (funcall sym-check-validity-hook sym-input))
  872. X    ) ; progn
  873. X  ; else
  874. X    (setq sym-valid-response t)
  875. X  ) ; if
  876. X) ; while
  877. X  ) ; progn
  878. X                    ; Restore display string
  879. X(if (< sym-start (marker-position sym-end-marker))
  880. X  (progn
  881. X    (goto-char sym-start)
  882. X    (delete-backward-char (length sym-start-display))
  883. X    (goto-char (marker-position sym-end-marker))
  884. X    (delete-char (length sym-end-display))
  885. X  ) ; progn
  886. X) ; if
  887. X                    ; Restore mode variables
  888. X(setq major-mode save-mode)
  889. X(setq mode-name save-name)
  890. X(use-local-map save-keymap)
  891. X) ; unwind-protect
  892. X                    ; Return string entered
  893. Xsym-input
  894. X) ; let
  895. X) ; defun sym-read-string
  896. X
  897. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  898. X
  899. X(defun sym-reposition-point ()
  900. X  "Reposition point within the symbol line, if necessary."
  901. X  (interactive)
  902. X                    ; Local Variables
  903. X  (let ()
  904. X                    ; Body
  905. X    (if (or (< (point) sym-start)
  906. X      (> (point) (marker-position sym-end-marker)))
  907. X    (goto-char (marker-position sym-end-marker))
  908. X  ) ; if
  909. X) ; let
  910. X) ; defun sym-reposition-point
  911. X
  912. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  913. X
  914. X(defun sym-reset-display ()
  915. X  "Reset the displayed string in symbol-mode."
  916. X                    ; Local Variables
  917. X  (let ()
  918. X                    ; Body
  919. X    (if (= sym-start (marker-position sym-end-marker))
  920. X      (progn
  921. X                    ; Remove the display markers
  922. X    (delete-backward-char (length sym-start-display))
  923. X    (delete-char (length sym-end-display))
  924. X                    ; Insert original string
  925. X    (insert-before-markers sym-original)
  926. X    (search-backward sym-original)
  927. X                    ; Reset the markers to empty
  928. X    (set-marker sym-end-marker (point))
  929. X    (setq sym-start (point))
  930. X      ) ; progn
  931. X    ) ; if
  932. X  ) ; let
  933. X) ; defun sym-reset-display
  934. X
  935. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  936. X
  937. X(defun sym-self-insert-command ()
  938. X  "Insert this character in symbol-mode."
  939. X  (interactive)
  940. X                    ; Local Variables
  941. X  (let (sym-char)
  942. X                    ; Body
  943. X    (setq sym-char (char-to-string last-input-char))
  944. X    (sym-reposition-point)
  945. X    (sym-create-display)
  946. X    (insert-before-markers sym-char)
  947. X    (if (and (= ?\) (char-syntax last-input-char))
  948. X      blink-matching-paren)
  949. X    (blink-matching-open)
  950. X  ) ; if
  951. X) ; let
  952. X) ; defun sym-self-insert-command
  953. X
  954. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  955. X
  956. X(defun sym-set-local-keys ()
  957. X  "Create key-map for Symbol Mode."
  958. X                    ; Local Variables
  959. X  (let (empty-keymap)
  960. X                    ; Body
  961. X    (setq empty-keymap (make-keymap))
  962. X    (setq symbol-mode-map empty-keymap)
  963. X    (suppress-keymap symbol-mode-map t)
  964. X
  965. X  (define-key symbol-mode-map "\177" 'sym-delete-backward-char) ; DEL
  966. X
  967. X                    ; Control keys
  968. X  (define-key symbol-mode-map "\C-a" 'sym-position-start)
  969. X  (define-key symbol-mode-map "\C-b" 'sym-backward-char)
  970. X                    ; ^C is a prefix
  971. X  (define-key symbol-mode-map "\C-d" 'sym-delete-char)
  972. X  (define-key symbol-mode-map "\C-e" 'sym-position-end)
  973. X  (define-key symbol-mode-map "\C-f" 'sym-forward-char)
  974. X  (define-key symbol-mode-map "\C-g" 'sym-abort-recursive-edit)
  975. X                    ; ^H is okay
  976. X  (define-key symbol-mode-map "\C-i" 'sym-expand-last-id) ; TAB
  977. X  (define-key symbol-mode-map "\C-j" 'exit-recursive-edit) ; LFD
  978. X  (define-key symbol-mode-map "\C-k" 'sym-kill-line)
  979. X                    ; ^L is okay
  980. X  (define-key symbol-mode-map "\C-m" 'exit-recursive-edit) ; CR
  981. X                    ; ^N is okay
  982. X  (define-key symbol-mode-map "\C-o" 'sym-illegal-command)
  983. X                    ; ^P is okay
  984. X  (define-key symbol-mode-map "\C-q" 'sym-illegal-command)
  985. X  (define-key symbol-mode-map "\C-r" 'sym-illegal-command)
  986. X  (define-key symbol-mode-map "\C-s" 'sym-illegal-command)
  987. X  (define-key symbol-mode-map "\C-t" 'sym-transpose-chars)
  988. X
  989. X
  990. X  (define-key symbol-mode-map "\C-u" 'sym-illegal-command)
  991. X                    ; ^V is okay
  992. X  (define-key symbol-mode-map "\C-w" 'sym-illegal-command)
  993. X                    ; ^X is a prefix
  994. X  (define-key symbol-mode-map "\C-y" 'sym-illegal-command)
  995. X                    ; ^Z is okay
  996. X
  997. X                    ; ^X prefix keys
  998. X  (define-key symbol-mode-map "\C-x\t" 'sym-illegal-command)
  999. X  (define-key symbol-mode-map "\C-x\C-l" 'sym-illegal-command)
  1000. X  (define-key symbol-mode-map "\C-x\C-o" 'sym-illegal-command)
  1001. X  (define-key symbol-mode-map "\C-x\C-t" 'sym-illegal-command)
  1002. X  (define-key symbol-mode-map "\C-x\C-u" 'sym-illegal-command)
  1003. X  (define-key symbol-mode-map "\C-xg" 'sym-illegal-command)
  1004. X  (define-key symbol-mode-map "\C-xi" 'sym-illegal-command)
  1005. X  (define-key symbol-mode-map "\C-xk" 'sym-illegal-command)
  1006. X  (define-key symbol-mode-map "\C-x\177" 'sym-illegal-command) ; ^X DEL
  1007. X
  1008. X                    ; ESC prefix keys
  1009. X  (define-key symbol-mode-map "\e\C-b" 'sym-backward-word)
  1010. X  (define-key symbol-mode-map "\e\C-c" 'exit-recursive-edit)
  1011. X  (define-key symbol-mode-map "\e\C-f" 'sym-forward-word)
  1012. X  (define-key symbol-mode-map "\e\C-k" 'sym-illegal-command)
  1013. X  (define-key symbol-mode-map "\e\C-o" 'sym-illegal-command)
  1014. X  (define-key symbol-mode-map "\e\C-s" 'sym-illegal-command)
  1015. X  (define-key symbol-mode-map "\e\C-t" 'sym-illegal-command)
  1016. X  (define-key symbol-mode-map "\e\C-w" 'sym-illegal-command)
  1017. X  (define-key symbol-mode-map "\e\C-\\" 'sym-illegal-command)
  1018. X  (define-key symbol-mode-map "\e " 'sym-illegal-command) ; ESC SPACE
  1019. X  (define-key symbol-mode-map "\e%" 'sym-illegal-command)
  1020. X  (define-key symbol-mode-map "\e(" 'sym-illegal-command)
  1021. X  (define-key symbol-mode-map "\e)" 'sym-illegal-command)
  1022. X  (define-key symbol-mode-map "\e;" 'sym-illegal-command)
  1023. X  (define-key symbol-mode-map "\e<" 'sym-position-start)
  1024. X  (define-key symbol-mode-map "\e>" 'sym-position-end)
  1025. X  (define-key symbol-mode-map "\e^" 'sym-illegal-command)
  1026. X  (define-key symbol-mode-map "\eb" 'sym-backward-word)
  1027. X  (define-key symbol-mode-map "\ed" 'sym-kill-word)
  1028. X  (define-key symbol-mode-map "\ef" 'sym-forward-word)
  1029. X  (define-key symbol-mode-map "\eg" 'sym-illegal-command)
  1030. X  (define-key symbol-mode-map "\ei" 'sym-illegal-command)
  1031. X  (define-key symbol-mode-map "\ej" 'sym-illegal-command)
  1032. X  (define-key symbol-mode-map "\ek" 'sym-illegal-command)
  1033. X  (define-key symbol-mode-map "\eq" 'sym-illegal-command)
  1034. X  (define-key symbol-mode-map "\et" 'sym-illegal-command)
  1035. X  (define-key symbol-mode-map "\ey" 'sym-illegal-command)
  1036. X  (define-key symbol-mode-map "\ez" 'sym-illegal-command)
  1037. X  (define-key symbol-mode-map "\e\177" 'sym-backward-kill-word) ; ESC DEL
  1038. X
  1039. X                    ; Self-inserting keys
  1040. X
  1041. X  (define-key symbol-mode-map " " 'sym-self-insert-command) ; SPACE
  1042. X  (define-key symbol-mode-map "!" 'sym-self-insert-command)
  1043. X  (define-key symbol-mode-map "\042" 'sym-self-insert-command) ; DOUBLE QUOTE
  1044. X  (define-key symbol-mode-map "#" 'sym-self-insert-command)
  1045. X  (define-key symbol-mode-map "$" 'sym-self-insert-command)
  1046. X  (define-key symbol-mode-map "%" 'sym-self-insert-command)
  1047. X  (define-key symbol-mode-map "&" 'sym-self-insert-command)
  1048. X  (define-key symbol-mode-map "\047" 'sym-self-insert-command) ; SINGLE QUOTE
  1049. X  (define-key symbol-mode-map "(" 'sym-self-insert-command)
  1050. X  (define-key symbol-mode-map ")" 'sym-self-insert-command)
  1051. X  (define-key symbol-mode-map "*" 'sym-self-insert-command)
  1052. X  (define-key symbol-mode-map "+" 'sym-self-insert-command)
  1053. X  (define-key symbol-mode-map "," 'sym-self-insert-command)
  1054. X  (define-key symbol-mode-map "-" 'sym-self-insert-command)
  1055. X  (define-key symbol-mode-map "." 'sym-self-insert-command)
  1056. X  (define-key symbol-mode-map "/" 'sym-self-insert-command)
  1057. X
  1058. X  (define-key symbol-mode-map "0" 'sym-self-insert-command)
  1059. X  (define-key symbol-mode-map "1" 'sym-self-insert-command)
  1060. X  (define-key symbol-mode-map "2" 'sym-self-insert-command)
  1061. X  (define-key symbol-mode-map "3" 'sym-self-insert-command)
  1062. X  (define-key symbol-mode-map "4" 'sym-self-insert-command)
  1063. X  (define-key symbol-mode-map "5" 'sym-self-insert-command)
  1064. X  (define-key symbol-mode-map "6" 'sym-self-insert-command)
  1065. X  (define-key symbol-mode-map "7" 'sym-self-insert-command)
  1066. X  (define-key symbol-mode-map "8" 'sym-self-insert-command)
  1067. X  (define-key symbol-mode-map "9" 'sym-self-insert-command)
  1068. X
  1069. X  (define-key symbol-mode-map ":" 'sym-self-insert-command)
  1070. X  (define-key symbol-mode-map ";" 'sym-self-insert-command)
  1071. X  (define-key symbol-mode-map "<" 'sym-self-insert-command)
  1072. X  (define-key symbol-mode-map "=" 'sym-self-insert-command)
  1073. X  (define-key symbol-mode-map ">" 'sym-self-insert-command)
  1074. X  (define-key symbol-mode-map "?" 'sym-self-insert-command)
  1075. X  (define-key symbol-mode-map "@" 'sym-self-insert-command)
  1076. X
  1077. X  (define-key symbol-mode-map "A" 'sym-self-insert-command)
  1078. X  (define-key symbol-mode-map "B" 'sym-self-insert-command)
  1079. X  (define-key symbol-mode-map "C" 'sym-self-insert-command)
  1080. X  (define-key symbol-mode-map "D" 'sym-self-insert-command)
  1081. X  (define-key symbol-mode-map "E" 'sym-self-insert-command)
  1082. X  (define-key symbol-mode-map "F" 'sym-self-insert-command)
  1083. X  (define-key symbol-mode-map "G" 'sym-self-insert-command)
  1084. X  (define-key symbol-mode-map "H" 'sym-self-insert-command)
  1085. X  (define-key symbol-mode-map "I" 'sym-self-insert-command)
  1086. X  (define-key symbol-mode-map "J" 'sym-self-insert-command)
  1087. X  (define-key symbol-mode-map "K" 'sym-self-insert-command)
  1088. X  (define-key symbol-mode-map "L" 'sym-self-insert-command)
  1089. X  (define-key symbol-mode-map "M" 'sym-self-insert-command)
  1090. X  (define-key symbol-mode-map "N" 'sym-self-insert-command)
  1091. X  (define-key symbol-mode-map "O" 'sym-self-insert-command)
  1092. X  (define-key symbol-mode-map "P" 'sym-self-insert-command)
  1093. X  (define-key symbol-mode-map "Q" 'sym-self-insert-command)
  1094. X  (define-key symbol-mode-map "R" 'sym-self-insert-command)
  1095. X  (define-key symbol-mode-map "S" 'sym-self-insert-command)
  1096. X  (define-key symbol-mode-map "T" 'sym-self-insert-command)
  1097. X  (define-key symbol-mode-map "U" 'sym-self-insert-command)
  1098. X  (define-key symbol-mode-map "V" 'sym-self-insert-command)
  1099. X  (define-key symbol-mode-map "W" 'sym-self-insert-command)
  1100. X  (define-key symbol-mode-map "X" 'sym-self-insert-command)
  1101. X  (define-key symbol-mode-map "Y" 'sym-self-insert-command)
  1102. X  (define-key symbol-mode-map "Z" 'sym-self-insert-command)
  1103. X
  1104. X  (define-key symbol-mode-map "[" 'sym-self-insert-command)
  1105. X  (define-key symbol-mode-map "\134" 'sym-self-insert-command) ; BACKSLASH
  1106. X  (define-key symbol-mode-map "]" 'sym-self-insert-command)
  1107. X  (define-key symbol-mode-map "^" 'sym-self-insert-command)
  1108. X  (define-key symbol-mode-map "_" 'sym-self-insert-command)
  1109. X  (define-key symbol-mode-map "`" 'sym-self-insert-command)
  1110. X
  1111. X  (define-key symbol-mode-map "a" 'sym-self-insert-command)
  1112. X  (define-key symbol-mode-map "b" 'sym-self-insert-command)
  1113. X  (define-key symbol-mode-map "c" 'sym-self-insert-command)
  1114. X  (define-key symbol-mode-map "d" 'sym-self-insert-command)
  1115. X  (define-key symbol-mode-map "e" 'sym-self-insert-command)
  1116. X  (define-key symbol-mode-map "f" 'sym-self-insert-command)
  1117. X  (define-key symbol-mode-map "g" 'sym-self-insert-command)
  1118. X  (define-key symbol-mode-map "h" 'sym-self-insert-command)
  1119. X  (define-key symbol-mode-map "i" 'sym-self-insert-command)
  1120. X  (define-key symbol-mode-map "j" 'sym-self-insert-command)
  1121. X  (define-key symbol-mode-map "k" 'sym-self-insert-command)
  1122. X  (define-key symbol-mode-map "l" 'sym-self-insert-command)
  1123. X  (define-key symbol-mode-map "m" 'sym-self-insert-command)
  1124. X  (define-key symbol-mode-map "n" 'sym-self-insert-command)
  1125. X  (define-key symbol-mode-map "o" 'sym-self-insert-command)
  1126. X  (define-key symbol-mode-map "p" 'sym-self-insert-command)
  1127. X  (define-key symbol-mode-map "q" 'sym-self-insert-command)
  1128. X  (define-key symbol-mode-map "r" 'sym-self-insert-command)
  1129. X  (define-key symbol-mode-map "s" 'sym-self-insert-command)
  1130. X  (define-key symbol-mode-map "t" 'sym-self-insert-command)
  1131. X  (define-key symbol-mode-map "u" 'sym-self-insert-command)
  1132. X  (define-key symbol-mode-map "v" 'sym-self-insert-command)
  1133. X  (define-key symbol-mode-map "w" 'sym-self-insert-command)
  1134. X  (define-key symbol-mode-map "x" 'sym-self-insert-command)
  1135. X  (define-key symbol-mode-map "y" 'sym-self-insert-command)
  1136. X  (define-key symbol-mode-map "z" 'sym-self-insert-command)
  1137. X
  1138. X  (define-key symbol-mode-map "{" 'sym-self-insert-command)
  1139. X  (define-key symbol-mode-map "|" 'sym-self-insert-command)
  1140. X  (define-key symbol-mode-map "}" 'sym-self-insert-command)
  1141. X  (define-key symbol-mode-map "~" 'sym-self-insert-command)
  1142. X
  1143. X  ) ; let
  1144. X) ; defun sym-set-local-keys
  1145. X
  1146. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1147. X
  1148. X(defun sym-transpose-chars ()
  1149. X  "Interchange characters arond point, moving forward one character.
  1150. X    If at end of symbol line, the previous two characters are exchanged."
  1151. X  (interactive)
  1152. X                    ; Local Variables
  1153. X  (let (save-position)
  1154. X                    ; Body
  1155. X    (sym-reposition-point)
  1156. X    (if (> (point) sym-start)
  1157. X      (if (< (point) (marker-position sym-end-marker))
  1158. X    (transpose-chars 1)
  1159. X      ; else
  1160. X    (if (> (point) (1+ sym-start))
  1161. X      (progn
  1162. X                    ; transpose does not
  1163. X                    ;   insert-before-markers
  1164. X        (setq save-position (marker-position sym-end-marker))
  1165. X        (backward-char 1)
  1166. X        (transpose-chars 1)
  1167. X        (set-marker sym-end-marker save-position)
  1168. X      ) ; progn
  1169. X    ; else
  1170. X      (ding)
  1171. X    ) ; if
  1172. X      ) ; if
  1173. X    ; else
  1174. X      (ding)
  1175. X    ) ; if
  1176. X  ) ; let
  1177. X) ; defun sym-transpose-chars
  1178. X
  1179. X;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1180. X
  1181. X;;; end of symbol.el
  1182. SHAR_EOF
  1183. if test 25432 -ne "`wc -c < 'symbol.el'`"
  1184. then
  1185.     echo shar: "error transmitting 'symbol.el'" '(should have been 25432 characters)'
  1186. fi
  1187. fi
  1188. echo shar: "extracting 'tplreplace.el'" '(3122 characters)'
  1189. if test -f 'tplreplace.el'
  1190. then
  1191.     echo shar: "will not over-write existing file 'tplreplace.el'"
  1192. else
  1193. sed 's/^X//' << \SHAR_EOF > 'tplreplace.el'
  1194. X;;; tplreplace.el -- Replace commands for Emacs.
  1195. X;;; Copyright (C) 1985 Richard M. Stallman.
  1196. X;;; Modified by Mark Ardis, Wang Institute, 12/14/86 for template-mode
  1197. X
  1198. X(provide 'tplreplace)
  1199. X
  1200. X(defun perform-replace-tpl (from-string to-string
  1201. X                query-flag regexp-flag delimited-flag
  1202. X            search-function position-function replace-function
  1203. X            &optional reposition-function)
  1204. X  (let ((nocasify (not (and case-fold-search case-replace
  1205. X                (string-equal from-string
  1206. X                      (downcase from-string)))))
  1207. X    (literal (not regexp-flag))
  1208. X    (search-string from-string)
  1209. X    (keep-going t)
  1210. X    (lastrepl nil)            ;Position after last match considered.
  1211. X    (help-form
  1212. X     '(concat "Query replacing "
  1213. X          from-string " with " to-string ".\n\n"
  1214. X          (substitute-command-keys query-replace-help))))
  1215. X    (push-mark)
  1216. X    (push-mark)
  1217. X    (while (and keep-going
  1218. X        (not (eobp))
  1219. X        (progn
  1220. X         (set-mark (point))
  1221. X         (funcall search-function search-string nil t)))
  1222. X      ;; Don't replace the null string 
  1223. X      ;; right after end of previous replacement.
  1224. X      (if (eq lastrepl (point))
  1225. X      (forward-char 1)
  1226. X    (undo-boundary)
  1227. X    (if (not query-flag)
  1228. X        (progn
  1229. X          (setq tpl-query-flag nil)
  1230. X          (funcall position-function)
  1231. X          (funcall replace-function from-string to-string)
  1232. X          )
  1233. X      (let (done replaced)
  1234. X        (setq tpl-query-flag t)
  1235. X        (while (not done)
  1236. X          (message "Query replacing %s with %s: " from-string to-string)
  1237. X          ;; Preserve the match data.  Process filters and sentinels
  1238. X          ;; could run inside read-char..
  1239. X          (let ((data (match-data)))
  1240. X        (setq char (read-char))
  1241. X        (store-match-data data))
  1242. X          (cond ((not (memq char '(?\e ?\ ?\, ?\. ?! ?\177 ?\C-r ?\C-w ?^)))
  1243. X             (setq keep-going nil)
  1244. X             (setq unread-command-char char)
  1245. X             (setq done t))
  1246. X            ((= char ?\e)
  1247. X             (setq keep-going nil)
  1248. X             (setq done t))
  1249. X            ((= char ?^)
  1250. X             (goto-char (mark))
  1251. X             (setq replaced t))
  1252. X            ((= char ?\ )
  1253. X             (or replaced
  1254. X             (progn
  1255. X               (funcall position-function)
  1256. X               (funcall replace-function from-string to-string)
  1257. X               ))
  1258. X             (setq done t))
  1259. X            ((= char ?\.)
  1260. X             (or replaced
  1261. X             (progn
  1262. X               (funcall position-function)
  1263. X               (funcall replace-function from-string to-string)
  1264. X               ))
  1265. X             (setq keep-going nil)
  1266. X             (setq done t))
  1267. X            ((and (not replaced) (= char ?\,))
  1268. X             (progn
  1269. X               (funcall position-function)
  1270. X               (funcall replace-function from-string to-string)
  1271. X               )
  1272. X             (setq replaced t))
  1273. X            ((= char ?!)
  1274. X             (or replaced
  1275. X             (progn
  1276. X               (funcall position-function)
  1277. X               (funcall replace-function from-string to-string)
  1278. X               ))
  1279. X             (setq done t query-flag nil))
  1280. X            ((= char ?\177)
  1281. X             (setq done t))
  1282. X            ((= char ?\C-r)
  1283. X             (store-match-data
  1284. X               (prog1 (match-data)
  1285. X             (save-excursion (recursive-edit)))))
  1286. X            ((= char ?\C-w)
  1287. X             (delete-region (point) (mark))
  1288. X             (save-excursion (recursive-edit))
  1289. X             (setq replaced t)))
  1290. X          )))
  1291. X    (setq lastrepl (point)))
  1292. X      (if reposition-function
  1293. X      (funcall reposition-function)
  1294. X    ) ; if
  1295. X      )
  1296. X    (pop-mark)
  1297. X    (message "Done")
  1298. X    (setq tpl-query-flag t)
  1299. X    keep-going))
  1300. SHAR_EOF
  1301. if test 3122 -ne "`wc -c < 'tplreplace.el'`"
  1302. then
  1303.     echo shar: "error transmitting 'tplreplace.el'" '(should have been 3122 characters)'
  1304. fi
  1305. fi
  1306. exit 0
  1307. #    End of shell archive
  1308.  
  1309.  
  1310.